package com.ling.minio.controller;

import com.ling.minio.model.dto.PresignParam;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.ZonedDateTime;
import java.util.Map;
import java.util.UUID;

/**
 * @author: ling007
 * @date: 2024/10/14 17:09
 * @description:
 */

@RestController
@RequestMapping("/minio")
public class MinioController {

//
//    private final MinioClient minioClient;
//
//    public MinioController(MinioClient minioClient) {
//        this.minioClient = minioClient;
//    }
//
//    @PostMapping("/presign")
//    public Map<String, String> presign(@RequestBody PresignParam presignParam) {
//        // 如果前端不指定桶，那么给一个默认的
//        if (StringUtils.isEmpty(presignParam.getBucket())) {
//            presignParam.setBucket("demo");
//        }
//
//        // 前端不指定文件名称，就给一个UUID
//        if (StringUtils.isEmpty(presignParam.getFilename())) {
//            presignParam.setFilename(UUID.randomUUID().toString());
//        }
//
//        // 如果想要以子目录的方式保存，就在前面加上斜杠来表示
//        //        presignParam.setFilename("/2023/" + presignParam.getFilename());
//
//        // 设置凭证过期时间
//        ZonedDateTime expirationDate = ZonedDateTime.now().plusMinutes(10);
//        // 创建一个凭证
//        PostPolicy policy = new PostPolicy(presignParam.getBucket(), expirationDate);
//        policy.addStartsWithCondition();tartsWithCondition(presignParam.getFilename());
//        policy.setKeyStartsWith("uploads/");
//        // 限制文件大小，单位是字节byte，也就是说可以设置如：只允许10M以内的文件上传
//        //        policy.setContentRange(1, 10 * 1024);
//        // 限制上传文件请求的ContentType
//        //        policy.setContentType("image/png");
//
//        try {
//            // 生成凭证并返回
//            final Map<String, String> map = minioClient.getPresignedPostFormData(policy);
//            for (Map.Entry<String, String> entry : map.entrySet()) {
//                System.out.println(entry.getKey() + " = " + entry.getValue());
//            }
//            return map;
//        } catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException e) {
//            e.printStackTrace();
//        }
//
//        return null;
//    }

}
